Skip to main content

바이너리로 MariaDB 설치

본 설치방법사용에 따른 문제는 소프트캠프에 책임이 없음을 알려 드립니다.

본 가이드는 바이너리로 설치하는 방법 예시입니다.
인터넷 상에 바이너리 설치 방법 중 성공한 부분을 발췌하여 공유하였고
설치에 대한 책임은 소프트캠프에 없으며 다른 설치 방법으로 설치 해도 무관합니다.

1. 바이너리파일 다운로드

2. 유저 및 그룹 생성

groupadd mysql
useradd -g -m mysql mysql
chown -R mysql:mysql mariadb*.tar.gz

3. 압축 풀기

  • 압축 파일 /usr/local 아래로 이동
mv mariadb*.tar.gz /usr/local/mariadb.tar.gz
  • 압축 해제
cd /usr/local
tar -zxvf mariadb.tar.gz
  • 심볼릭 링크 생성
ln -s ./mariadb압출해제디렉토리 /usr/local/mysql

4. 환경변수 등록

vi /etc/profile
  • 아래에 내용 추가
export MARIADB_HOME=/usr/local/mysql
export PATH=$PATH:$MARIADB_HOME/bin:.
  • 수정내용 적용
source /etc/profile

5. my.cnf 수정

vi /etc/my.cnf
해당 파일이 없거나 기본 설치한 경우 아래 경로를 확인, 파일자체가 없다면 아래 내용으로 my.cnf 생성
vi /etc/mysql/mariadb.conf.d/50-server.cnf
  • 아래의 설정을 추가 후 저장
파일별 맞는 [항목]의 값들을 넣어주세요

기존에 [항목] 이 있는데 하위에 넣으면 상위의 값만 사용이 됩니다.
각 파일에 맞는 항목을 [mysql], [mysqld]등의 항목에 맞는 값을 넣어주세요.
자동 설치를 통해 설치한 경우 50-server.cnf, 50-client.cnf파일로 사용하시면 됩니다.

  • 아래의 설정을 각 항목에 추가, 고객사 환경에 맞는 값으로 기록해야 하는 항목 맨 하단에 있음.
[mysql]
# CLI 클라이언트에서 자동 완성 기능 비활성화
no-auto-rehash

[mysqld_safe]
# 동시에 열 수 있는 파일의 최대 개수 설정
open-files-limit = 65535

[mysqld]
#초기값 : bind-address = 127.0.0.1 에서 수정
bind-address = 0.0.0.0

#초기값 : character-set-server = utf8 에서 수정
character-set-server = utf8mb4

#초기값 : collation-server=utf8_general_ci 에서 수정
collation-server=utf8mb4_general_ci

#초기값 : expire_logs_days = 10 에서 수정
expire_logs_days = 3

# 호스트명 확인 과정 생략으로 접속 속도 향상
skip-name-resolve

# 테이블명을 소문자로 저장하고 대소문자 구분 없이 처리
lower_case_table_names = 1

# 새로운 연결이 생성될 때마다 문자셋을 UTF-8로 설정
init_connect = SET NAMES utf8
# 새로운 연결의 문자열 정렬 규칙 설정
init_connect = SET collation_connection = utf8mb4_general_ci

# === 로그 설정 ===
# 경고 메시지 로깅 활성화
log_warnings = 1
# 바이너리 로그 형식을 ROW 형식으로 설정 (상세한 변경 내용 기록)
binlog_format = ROW
# 바이너리 로그를 디스크에 즉시 동기화
sync_binlog = 1
# 바이너리 로그 캐시 크기 설정
binlog_cache_size = 1M
# 복제 환경에서 함수 생성 허용
log_bin_trust_function_creators = 1

# 일반 쿼리 로그 설정
log-output = FILE
general_log = OFF

# 슬로우 쿼리 로그 설정
slow_query_log = ON
# 3초 이상 걸리는 쿼리를 슬로우 쿼리로 기록
long_query_time = 3

# === 연결 및 스레드 설정 ===
# 최대 동시 접속자 수
max_connections = 1000
# 최대 접속 에러 수
max_connect_errors = 100
# 대기 큐 크기
back_log = 100
# 스레드 캐시 크기
thread_cache_size = 1000
# 미사용 연결 타임아웃 (초)
wait_timeout = 3600
interactive-timeout = 3600

# === 쿼리 캐시 설정 ===
# 쿼리 캐시 비활성화 (성능 향상을 위해)
query_cache_size = 0M
query_cache_type = 0
query_cache_limit = 0M

# === 메모리 테이블 설정 ===
# 메모리 테이블의 최대 크기
max_heap_table_size = 32M
# 임시 테이블의 최대 크기
tmp_table_size = 32M
# 패킷의 최대 크기
max_allowed_packet = 1024M

# === 버퍼 설정 ===
# 인덱스 읽기 버퍼 크기
read_rnd_buffer_size = 4M
# 테이블 스캔 버퍼 크기
read_buffer_size = 2M
# 정렬 버퍼 크기
sort_buffer_size = 2M
# 조인 버퍼 크기
join_buffer_size = 2M
# 열린 테이블 캐시 크기
table_open_cache = 10000

# === 트랜잭션 설정 ===
# 트랜잭션 격리 수준 설정
transaction_isolation = READ-COMMITTED

# === 시스템 설정 ===
# DNS 조회 비활성화
skip_name_resolve = ON
# 외부 잠금 비활성화
skip_external_locking = ON
# 호스트 캐시 비활성화
skip-host-cache

# === MyISAM(스토리지 엔진) 설정 ===
# MyISAM 키 버퍼 크기
key_buffer_size = 32M
# 대량 삽입 버퍼 크기
bulk_insert_buffer_size = 64M
# MyISAM 정렬 버퍼 크기
myisam_sort_buffer_size = 128M
# MyISAM 임시 파일 최대 크기
myisam_max_sort_file_size = 10G
# MyISAM 복구 스레드 수
myisam_repair_threads = 1


# === InnoDB 설정 ===
# 기본 스토리지 엔진 설정
default-storage-engine = InnoDB
default-tmp-storage-engine = InnoDB
# 테이블별 파일 사용 (관리의 용이성)
innodb_file_per_table = 1
# InnoDB 로그 파일 크기
innodb_log_file_size = 512M
# InnoDB 로그 버퍼 크기
innodb_log_buffer_size = 32M
# 트랜잭션 커밋 시 로그 동기화 설정
innodb_flush_log_at_trx_commit = 1
# 잠금 대기 타임아웃 (초)
innodb_lock_wait_timeout = 30

# === 시스템 리소스에 따른 설정 ===
# ****** 중 요 ******
###고객사에 맞게 셋팅되어야 하는 설정###
# 물리 메모리의 50%로 설정 (예: 32GB 메모리의 경우 16GB 설정)
innodb_buffer_pool_size = 16G

# CPU 코어 수의 1/2로 설정 (예: 8코어의 경우 4 설정)
innodb_write_io_threads = 4
innodb_read_io_threads = 4

RPM으로 기본 설치시 파일들이 기본으로 설정되는 경로
# basedir = /usr
# datadir = /var/lib/mysql
# tmpdir = /tmp
# log_error = /var/log/mariadb/mariadb.log

# log_bin = /var/lib/mysql/mysql-bin
# 참고: log_bin이 활성화된 경우에만 해당 경로에 파일 생성

# general_log_file = /var/lib/mysql/hostname.log
# 참고: general_log가 활성화된 경우에만 해당 경로에 파일 생성

# slow_query_log_file = /var/lib/mysql/hostname-slow.log
# 참고: slow_query_log가 활성화된 경우에만 해당 경로에 파일 생성

# innodb_data_home_dir = /var/lib/mysql
# innodb_data_file_path = ibdata1:12M:autoextend
# innodb_log_group_home_dir = /var/lib/mysql
물리 메모리확인 방법(innodb_buffer_pool_size의 값 구하기)
  • 계산기에서 명령어로 나온값 /1024 /1024 /2 하였을때 나온 정수에 G붙여서 기입
    cat /proc/meminfo | grep MemTotal
CPU Core확인 방법(innodb_write_io_threads, innodb_read_io_threads의 값 구하기)
  • 계산기에서 명령어로 나온값 / 2 하였을때 나온 정수를 기입
  grep ^processor /proc/cpuinfo | wc -l

6. 설치

cd /usr/local/mysql/scripts
./mysql_install_db --user=사용자명 --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data

basedir, datadir 등 해당 계정이 읽고 쓸 수 있는 권한이 있는지 소유자인지 사전에 확인되어야 함.

7. systemd 서비스 등록

mariadb.service 설정 수정

cd /usr/local/mysql/support-files/systemd

vi mariadb.service

이 부분을 앞서 생성했던 사용자와 그룹명으로 설정해야 함. user= group=

앞서 /usr/local/mysql 대신 /usr/local/다른이름 이런식으로 생성했을 시에는 이 파일에서 /usr/local/mysql 부분을 전부 /usr/local/다른이름 으로 바꿔줘야함

mariadb.service systemd 등록
cp mariadb.service /etc/systemd/system/​

서비스 시작

systemctl start mariadb.service​

8. DB 접속

mysql -uroot

root 패스워드 설정

msqladmin -uroot password '패스워드'

9. trouble shooting

RHEL 8.2 에서 MariaDB 10.6 설치시 libncurses.so.5 와 libtinfo.so.5 라이브러리가 없다는 오류 메세지가 출력되었음.

그래서 진짜 없는지 우선 확인하고자 함.

find / -name "*ncurses*"
find / -name "*tinfo*"

둘 모두 *.so.6 은 있었음.

그래서 심볼릭 링크를 생성해줌.

ln -s /usr/lib64/libcurses.so.6 /usr/lib64/libcurses.so.5
ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

아니면, 다른 OS 버전 환경에서 *.so.5 가져와도 됨.

출처 : 원스톤 블로그